﻿String.prototype.format = function (args) {
    var result = this;
    if (arguments.length > 0) {
        if (arguments.length == 1 && typeof (args) == "object") {
            for (var key in args) {
                if (args[key] != undefined) {
                    var reg = new RegExp("({" + key + "})", "g");
                    result = result.replace(reg, args[key]);
                }
            }
        }
        else {
            for (var i = 0; i < arguments.length; i++) {
                if (arguments[i] != undefined) {
                    var reg = new RegExp("({)" + i + "(})", "g");
                    result = result.replace(reg, arguments[i]);
                }
            }
        }
    }
    return result;
}


; (function ($) {

    if ($.publish) {
        return;
    }

    var cache = {};

    $.publish = function () {
        var message = arguments[0],data=arguments, args = [], i = 1;
        setTimeout(function () {
            while (i < data.length) {
                args.push(data[i++]);
            }
            args.push(message);

            if (!cache[message]) {
                cache[message] = [];
            }
            cache[message].push(args);

            $(window).trigger(message, args);
        },1);
        return $;
    };


    $.subscribe = function () {
        var messages = $.trim(arguments[0]).replace(/\s+/, " "),
		arrMsg = messages.split(" "),
		callback = arguments[1],
		fetchCache = (typeof arguments[2] == "undefined") ? true : arguments[2];

        if (fetchCache) {
            for (var i = 0; i < arrMsg.length; i++) {
                var message = arrMsg[i];
                if (cache[message]) {
                    for (var j = 0; j < cache[message].length; j++) {
                        callback.apply(window, cache[message][j]);
                    }
                }
            }
        }

        $(window).bind(messages, function () {
            var args = [], i = 1;

            while (i < arguments.length) {
                args.push(arguments[i++]);
            }

            callback.apply(this, args);
        });

        return $;
    };
})(jQuery);

Date.prototype.Format = function (formatStr) {
    var str = formatStr;
    var Week = ['日', '一', '二', '三', '四', '五', '六'];

    str = str.replace(/yyyy|YYYY/, this.getFullYear());
    str = str.replace(/yy|YY/, (this.getYear() % 100) > 9 ? (this.getYear() % 100).toString() : '0' + (this.getYear() % 100));

    var month = this.getMonth() + 1;
    str = str.replace(/MM/, month > 9 ? month.toString() : '0' + month);
    str = str.replace(/M/g, month);

    str = str.replace(/w|W/g, Week[this.getDay()]);

    str = str.replace(/dd|DD/, this.getDate() > 9 ? this.getDate().toString() : '0' + this.getDate());
    str = str.replace(/d|D/g, this.getDate());

    str = str.replace(/hh|HH/, this.getHours() > 9 ? this.getHours().toString() : '0' + this.getHours());
    str = str.replace(/h|H/g, this.getHours());
    str = str.replace(/mm/, this.getMinutes() > 9 ? this.getMinutes().toString() : '0' + this.getMinutes());
    str = str.replace(/m/g, this.getMinutes());

    str = str.replace(/ss|SS/, this.getSeconds() > 9 ? this.getSeconds().toString() : '0' + this.getSeconds());
    str = str.replace(/s|S/g, this.getSeconds());

    return str;
}

